package com.zp.self.module.level_4_算法练习.算法.位图;

/**
 * @author By ZengPeng
 */
public class 力扣_387_字符串中的第一个唯一字符 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_387_字符串中的第一个唯一字符().firstUniqChar("leetcode"));
        System.out.println(new 力扣_387_字符串中的第一个唯一字符().firstUniqChar("loveleetcode"));
        System.out.println(new 力扣_387_字符串中的第一个唯一字符().firstUniqChar("aa"));
    }

    /**
     * 题目：给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
     * 提示：你可以假定该字符串只包含小写字母。
     *
     *示例：
     * s = "leetcode"
     * 返回 0
     * s = "loveleetcode"
     * 返回 2
     *
     * 分析：
     *      1.使用位图记录每个字符出现的次数，
     *      最后遍历位图，找到只出现过1次的所有字符，比较谁先出现.  || 也可以再遍历一次字符串 a[i]==1  ?
     *
     * 边界值 & 注意点：
     *      1.
     **/
    public int firstUniqChar(String s) {
        int[] arr =new int[26];
        for (char c : s.toCharArray())
            arr[c-97]+=1;
        Integer min =null;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==1){
                int index = s.indexOf((char) (i + 97));
                min=min==null?index:Math.min(index,min);
            }
        }
        return min==null? -1 :min;
    }
}
